iMobile 对接 iPortal

SuperMap iPortal(以下简称“iPortal”) 是面向云计算的GIS门户平台,可实现对地图、服务、场景、数据等各种GIS资源进行整合、发现、分享与管理,还可实现对组织内部多个GIS服务器进行监控,保障平台系统安全稳定运行。其个性化的门户定制和API扩展开发能力,可以助您快速构建符合自身行业风格的GIS门户站点或打造属于组织、单位的特色私有云门户。

SuperMap iMobile(以下简称“iMobile”)全面对接iPortal,建立“云”+“端”一体化的资源管理体系,将云存储、大数据、云计算与移动GIS应用结合起来,提供更多便利的功能与服务。

iMobile对接iPortal实现的功能包括:

  • 用户账号:在移动端登录iPortal,支持密码修改和账户注销。
  • 查找资源:通过分类过滤,标签过滤,查询地图、场景、服务、数据、大屏、洞察等资源,支持模糊搜索,并对查询结果分类排序。
  • 资源管理:在移动端管理地图、场景、服务、数据、大屏、洞察等资源,移动端和云端实时同步。
  • 我的数据:移动端和云端数据交互,进行数据的上传、下载、分享等操作。
  • 我的地图:移动端进行地图属性修改,比例尺、名称、级数、投影的修改,与云端实时同步。
  • 我的服务:移动端实现服务共享和服务删除。

开发iMobile对接iPortal的应用程序,用到的jar包包括“com.supermap.data.jar”、 “com.supermap.mapping.jar”、“com.supermap.services.jar”、“okhttp-3.9.0.jar”、“okio-1.13.0.jar”,用到的so库为“libimb2d.so”,上述jar包和so库位于SuperMap iMobile产品包中的libs”文件夹下。

登录

iMobile与iPortal实现了账户统一,既两个产品可以使用同一个账号。使用时,先利用账号进行登录并设置设置监听。

监听

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

登录

IPortalService.getInstance().login(strPortalUrl,strUser,strPassword,bRememberPassword);

参考代码如下:

//添加监听
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {
  @Override
  public void onFailed(Exception exception) {
    Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_SHORT).show();
  }
  @Override
  public void onResponse(Response response) {
  }
});
//登录
String strPortalUrl = "user url";
String strUser = "user name";
String strPassword = "user password ";//登录的地址、账号、密码请根据实际应用添加
boolean bRememberPassword = true;
IPortalService.getInstance().login(strPortalUrl,strUser,strPassword,bRememberPassword);

资源管理

移动端可以对iPortal中自有的地图、服务、场景、数据、洞察、大屏等资源进行管理,并能够查看公有的地图、服务、场景、数据、洞察、大屏等资源。移动端发送查询请求、云服务响应请求并返回结果(JSON格式)、移动端获取并解析结果。

图:资源管理操作流程

地图

“我的地图”

获取和查看登录账号中的私有的地图服务,支持地图属性修改。

操作步骤:

① 调用IportalService类中的addOnResponseListener()方法,添加监听。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 构造查询参数(HashMap<String, String>),查询参数可参照下表:

名称 类型 含义
tags String[] 根据地图标签过滤。
suggest Boolean 是否是默认底图。
sourceTypes SourceType[] 根据地图来源类型过滤。包括:SUPERMAP_REST,MAPVIEWER,WMS,WMTS。
keywords String[] 关键字过滤。
epsgCode int 获取指定投影的地图。
orderBy OrderBy[] 排序字段,支持多个字段的排序。
orderType OrderType 升序还是降序。
currentPage int 分页页码。
pageSize int 分页中每页大小。
updateStart Long 查询此时间值及此时间值之后更新过的地图,如果为 null 或者小于零,则起始时间不限制。
updateEnd Long 查询此时间值及此时间值之前更新过的地图,如果为 nul 或者小于零 l,则截止时间不限制。
visitStart Long 查询此时间值及此时间值之后访问过的地图,如果为 null 或者小于零,则起始时间不限制。
visitEnd Long 查询此时间值及此时间值之前访问过的地图,如果为 null 或者小于零,则截止时间不限制。
filterFields FilterFields[] 用于关键字查询时的字段过滤。字段名称需大写。
checkStatus CheckStatus 根据审核状态过滤。

③ 调用IPortalService类中的getMyMaps()方法,获取登录账号下的地图资源合集。

IPortalService.getInstance().getMyDatas(searchParameter);

④ 解析iPortal返回的的“我的地图”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“MapsBean”类(地图集合)、“MapBaseBean”类(一幅地图),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。

参考代码如下:

//添加监听
try {
  IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {
    @Override
    public void onFailed(final Exception e) {
      runOnUiThread(new Runnable() {
        @Override
        public void run() {
          mTextView.setText("网络请求失败: " + e.getMessage());
        }
      });
    }
    @Override
    public void onResponse(Response response) {
      if (response.isSuccessful()) {
        try {
          final String responseBody = response.body().string();
          runOnUiThread(new Runnable() {
            @Override
            public void run() {
              //解析返回结果,这里使用MapsBean类,演示如何解析和获取参数值
              Gson gson = new Gson();
              m_mapsBean = gson.fromJson(responseBody, com.supermap.imobile.bean.MapsBean.class);
              int pageSize = m_mapsBean.getPageSize();
              int total = m_mapsBean.getTotal();
              int counts = 0;
              if (total >= pageSize) {
                counts = pageSize;
              } else {
                counts = total;
              }
              for (int i = 0; i < counts; i++) {
                com.supermap.imobile.bean.MapsBean.ContentBean contentBean = m_mapsBean.getContent().get(i);
                int ID = contentBean.getId();
                String mapTitle = contentBean.getTitle();
                String mapType = contentBean.getSourceType();
                String thumbnail = contentBean.getThumbnail();
                int count = contentBean.getVisitCount();
                long updateTime = contentBean.getUpdateTime();
                long createTime = contentBean.getCreateTime();
                String description = contentBean.getDescription();
              }
            }
          });
        } catch (Exception e) {
          e.printStackTrace();
        }
      } else {
        runOnUiThread(new Runnable() {
          @Override
          public void run() {
            mTextView.setText("网络请求失败");
          }
        });                            
      }
    }
  });
  } catch (Exception e) {
    e.printStackTrace();
  }
}
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“我的地图”
IPortalService.getInstance().getMyMaps(searchParameter);
注意事项:
  • 数据接收过程可能较长,不要将该过程写到主线程中。
  • 下面所述的请求的监听方法跟“我的地图”中,使用的监听方法相同,下面不在赘述。

“地图资源”

获取和查看iPortal公有服务中的地图资源。

操作步骤:

① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 构造查询参数(HashMap<String, String>),查询参数可参照表1:

③ 调用IportalService类中的getMaps()方法,获取iPortal中公有的地图资源。

IPortalService.getInstance().getMaps(searchParameter);

④ 解析iPortal返回的“地图资源”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“MapsBean”类(地图集合)、“MapBaseBean”类(一幅地图),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。

参考代码如下:

//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“地图资源”
IPortalService.getInstance().getMaps(searchParameter);

服务

“我的服务”

获取和查看登录账号中的私有的服务资源,支持将私有服务发布为公有服务。

操作步骤:

① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 构造查询参数(HashMap<String, String>),查询参数可参照上表。

③ 调用IportalService类中的getMyServices ()方法,获取登录账号下服务的集合。

IPortalService.getInstance().getMyServices (searchParameter);

④ 解析iPortal返回的“我的服务”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“ServicesBean”类(服务集合)、“ServiceBaseBean”类(单个服务),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。

参考代码如下:

//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“我的服务”
IPortalService.getInstance().getMyServices(searchParameter);

“服务资源”

获取和查看iPortal公有服务中的服务资源。

操作步骤:

① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 构造查询参数(HashMap<String, String>),查询参数可参上表:

③ 调用IportalService类中的getServices ()方法,获取iPortal中公有的服务资源。

IPortalService.getInstance().getServices (searchParameter);

④ 解析iPortal返回的“服务资源”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“ServicesBean”类(服务集合)、“ServiceBaseBean”类(单个服务),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。

参考代码如下:

//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“服务资源”
IPortalService.getInstance().getServices(searchParameter);

场景

“我的场景”

获取和查看登录账号中的私有的场景资源。

操作步骤:

① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 构造查询参数(HashMap<String, String>),查询参数可参照上表:

③ 调用IportalService类中的getMyScenes ()方法,获取登录账号下场景的集合。

IPortalService.getInstance().getMyScenes (searchParameter);

④ 解析iPortal返回的“我的场景”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“ScenesBean”类(场景集合)、“SceneBaseBean”类(单个场景),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。

参考代码如下:

//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“我的场景”
IPortalService.getInstance().getMyScenes(searchParameter);

“场景资源”

获取和查看iPortal公有服务中的场景资源。

操作步骤:

① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 构造查询参数(HashMap<String, String>),查询参数可参照上表:

③ 调用IportalService类中的getScenes ()方法,获取iPortal中公有的场景资源。

IPortalService.getInstance().getScenes (searchParameter);

④ 解析iPortal返回的“场景资源”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“ScenesBean”类(场景集合)、“SceneBaseBean”类(单个场景),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。

参考代码如下:

//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“场景资源”
IPortalService.getInstance().getScenes(searchParameter);

数据

“我的数据”

获取和查看登录账号中的私有的数据资源,可将数据发布至与服务,或下载云服务的数据至本地。

操作步骤:

① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 构造查询参数(HashMap<String, String>),查询参数可参照上表:

③ 调用IportalService类中的getMyDatas ()方法,获取登录账号下数据的集合。

IPortalService.getInstance().getMyDatas (searchParameter);

④ 解析iPortal返回的“我的数据”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“DatasBean”类(数据集合)、“DataBaseBean”类(单份数据),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。

参考代码如下:

//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“我的数据”
IPortalService.getInstance().getMyDatas(searchParameter);

“数据资源”

获取和查看iPortal公有服务中的数据资源。

操作步骤:

① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 构造查询参数(HashMap<String, String>),查询参数可参照上表:

③ 用IportalService类中的getDatas ()方法,获取iPortal中公有的数据资源。

IPortalService.getInstance().getDatas (searchParameter);

④ 解析iPortal返回的“场景资源”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“DatasBean”类(数据集合)、“DataBaseBean”类(单个数据),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。

参考代码如下:

//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“数据资源”
IPortalService.getInstance().getDatas(searchParameter);

洞察

“我的洞察”

获取和查看登录账号中的私有的洞察资源。

操作步骤:

① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 构造查询参数(HashMap<String, String>),查询参数可参照上表:

③ 调用IportalService类中的getMyInsights ()方法,获取登录账号下洞察的集合。

IPortalService.getInstance().getMyInsights (searchParameter);

④ 解析iPortal返回的“我的洞察”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“InsightsBean”类(洞察集合)、“InsightBaseBean”类(单个洞察),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。

参考代码如下:

//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“我的大屏”
IPortalService.getInstance().getMapDashboards(searchParameter);

“洞察资源”

获取和查看iPortal公有服务中的洞察资源。

操作步骤:

① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 构造查询参数(HashMap<String, String>),查询参数可参照上表:

③ 调用IportalService类中的getInsights ()方法,获取iPortal中公有的洞察资源。

IPortalService.getInstance().getInsights (searchParameter);

④ 解析iPortal返回的“场景资源”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“InsightsBean”类(洞察集合)、“InsightBaseBean”类(单个洞察),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。

参考代码如下:

//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“洞察资源”
IPortalService.getInstance().getInsights(searchParameter);

大屏

“我的大屏”

获取和查看登录账号中的私有的大屏资源。

操作步骤:

① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 构造查询参数(HashMap<String, String>),查询参数可参照上表:

③ 调用IportalService类中的getMapDashboards ()方法,获取登录账号下大屏的集合。

IPortalService.getInstance().getMapDashboards (searchParameter);

④ 解析iPortal返回的“我的大屏”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“MyMapDashboards”类(大屏集合)、“MapDashboardBaseBean”类(单个大屏),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。

参考代码如下:

//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“我的大屏”
IPortalService.getInstance().getMapDashboards(searchParameter);

“大屏资源”

获取和查看iPortal公有服务中的大屏资源。

操作步骤:

① 添加监听,调用IportalService类中的addOnResponseListener()方法,添加监听。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 构造查询参数(HashMap<String, String>),查询参数可参照上表:

③ 调用IportalService类中的getMapDashboards ()方法,获取iPortal中公有的洞察资源。

IPortalService.getInstance().getMapDashboards (searchParameter);

④ 解析iPortal返回的“场景资源”的查询结果,既解析返回的JSON字符串。在解析时,可根据使用需求自行解析,或者使用“MyMapDashboards”类(大屏集合)、“MapDashboardBaseBean”类(单个大屏),这两个类对应的.java格式文件存放在产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中。(iMobile 10i及以上版本支持)。

参考代码如下:

//添加监听
//略(参照“我的地图”)
//准备查询参数
HashMap<String, String> searchParameter = new HashMap<>();
searchParameter.put("pageSize", "20");
//获取“大屏资源”
IPortalService.getInstance().getMapDashboards(searchParameter);

地图属性

在移动端支持修改iPortal中对应账号下地图的属性。

操作步骤:

① 添加监听,调用IportalService类中的addOnResponseListener()方法。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 调用IportalService类中的getWebMap()方法,获取需要编辑的地图。

IPortalService.getInstance().getWebMap(m_nMapID);

③ 设置修改参数,这里用到了WebMapBean类,该类对应的.java文件,存储于产品包中,具体地址为产品包中的“/ SampleCode\Android Studio\AndroidStudioSampleCode\iportalunity\src\main\java\com\supermap\imobile\bean”中,(iMobile 10i及以上版本支持)。用户使用时,可利用该类或自己解析JSON文件。

④ 调用IportalService类中的updateWebMap()方法,修改地图属性。

参考代码:

①设置监听
IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {
  @Override
  public void onFailed(Exception e) {
    mTextView.setText("网络请求失败: " + e.getMessage());
  }
  @Override
  public void onResponse(Response response) {
    if (response.isSuccessful()) {
      try{
        final   String responseBody = response.body().string();
        runOnUiThread(new Runnable() {
          @Override
          public void run() {
            Gson gson = new Gson();
            m_webMapBean = gson.fromJson(responseBody, com.supermap.imobile.bean.WebMapBean.class);
            //③更新地图属性
            m_webMapBean.setTitle("湖北");
            m_webMapBean.setDescription("湖北人口");
            //将更新后的结果转为JSON格式
            String json = gson.toJson(m_webMapBean);
            //④更新地图属性
            IPortalService.getInstance().updateWebMap(m_nMapID, json);
          }
        });
      } catch (Exception e){
        e.printStackTrace();
      }
    }
  }
});
//②根据地图ID,获取对应的地图
IPortalService.getInstance().getWebMap(m_nMapID);

上传、下载

上传数据

支持将本地的数据,上传到iPortal服务中。

操作步骤:

① 添加获取上传数据ID的监听,用于获得上传数据的ID。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 调用IportalService类中的getMyDataID()方法,获取上传数据的ID。

IPortalService.getInstance().getMyDataID(filePath, tags, DataItemType.WORKSPACE);

③ 添加上传数据监听,用于获取数据是否上传成功。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

④ 调用IPortalService类中的uploadData()方法,上传数据。

IPortalService.getInstance().uploadData(filePath, childID, new ProgressRequestBody.ProgressListener() {});

⑤ 在监听中,获取上传进度

参考代码如下:

try {
  //本地数据绝对路径
  final String filePath = SDCARD + "/iPortal/我的资源/WORKSPACE/云南.zip";
  //①添加获取数据ID监听
  IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {
    @Override
    public void onFailed(Exception e) {
    }
    @Override
    public void onResponse(Response response) {
      if (response.isSuccessful()) {
        String responseBody = null;
          try {
            responseBody = response.body().string();
            JSONObject root = new JSONObject(responseBody);
            if (root.has("childID")) {
              int childID = root.getInt("childID");
              if (filePath != null && !filePath.isEmpty()) {
                //③添加上传数据监听                          
                IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {
                  @Override
                  public void onFailed(Exception e) {
                  }
                  @Override
                  public void onResponse(Response response) {
                  }
                });
                //④上传数据
                IPortalService.getInstance().uploadData(filePath, childID, new ProgressRequestBody.ProgressListener() {
                  @Override
                  public void transferred(final long length,final long size) {
                    runOnUiThread(new Runnable() {
                      @Override
                      public void run() {
                        //⑤展示上传进度
                        double value = (float)size / length * 100;
                        mTextView.setText(String.valueOf(value));
                      }
                    });
                  }
                });
              }
            } else {
            }
          } catch (Exception e) {
            e.printStackTrace();
          }
        } else {
      }
    }
  });
  //②根据参数,获取上传数据的ID
  String tags = "用户数据";
  String type = "WORKSPACE";
  IPortalService.getInstance().getMyDataID(filePath, tags, DataItemType.WORKSPACE);
} catch (Exception e) {
  e.printStackTrace();
}

下载数据

将iPortal中的数据资源下载到本地。

操作步骤:

① 添加监听,用于判断下载是否成功,并保存数据。

IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {});

② 调用IPortalService类中的downloadData()方法,下载数据。

IPortalService.getInstance().downloadData(nID, new ProgressResponseBody.ProgressListener() {});

③ 保存数据。

④ 在监听中,获取下载进度。

参考代码如下:

try {
  //下载数据的本地存储地址
  final  String filePath = SDCARD + "/iPortal/我的资源/WORKSPACE/a.zip";
  //①添加下载监听
  IPortalService.getInstance().addOnResponseListener(new OnResponseListener() {
    @Override
    public void onFailed(Exception e) {
    }
    @Override
    public void onResponse(Response response) {
      if (response.isSuccessful()) {
         try {
             //③保存数据
             ResponseBody body = response.body();
             InputStream is = body.byteStream();
             File file = new File(filePath);
             file.getParentFile().mkdirs();
             FileOutputStream fileout = new FileOutputStream(file);
             //根据实际运行效果 设置缓冲区大小
             byte[] buffer = new byte[1024];
             int ch = 0;
             while ((ch = is.read(buffer)) != -1) {
                 fileout.write(buffer, 0, ch);
             }
             is.close();
               fileout.flush();
               fileout.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
         } else {
       }
     }
    });
    //②下载数据
    IPortalService.getInstance().downloadData(1060511768, new ProgressResponseBody.ProgressListener() {
    @Override
    public void update(final long length, final long size, final boolean b) {
       runOnUiThread(new Runnable() {
       @Override
       public void run() {
          //④展示下载进度
          double value = (float)length / size * 100;
          mTextView.setText(String.valueOf(value));
       }
     });
   }
});
} catch (Exception e) {
  e.printStackTrace();
}